WORST_CASE(?,O(n^5)) * Step 1: DependencyPairs WORST_CASE(?,O(n^5)) + Considered Problem: - Strict TRS: *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3 ,tuple#2/2} - Obligation: innermost runtime complexity wrt. defined symbols {#add,#mult,#natmult,#pred,#succ,*,+,appendreverse ,appendreverse#1,bftMult,bftMult',bftMult'#1,bftMult'#2,bftMult'#3,bftMult'#4,bftMult'#5,computeLine ,computeLine#1,computeLine#2,dequeue,dequeue#1,dequeue#2,enqueue,enqueue#1,lineMult,lineMult#1,lineMult#2 ,matrixMult,matrixMult#1,reverse} and constructors {#0,#neg,#pos,#s,::,leaf,nil,node,tuple#2} + Applied Processor: DependencyPairs {dpKind_ = DT} + Details: We add the following dependency tuples: Strict DPs *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_5() bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#3#(nil(),@acc,@queue) -> c_11() bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#1#(nil(),@l2,@n) -> c_29() lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) matrixMult#1#(nil(),@m2) -> c_34() reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) Weak DPs #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() and mark the set of starting terms. * Step 2: PredecessorEstimation WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) appendreverse#1#(nil(),@sofar) -> c_5() bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#3#(nil(),@acc,@queue) -> c_11() bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#1#(nil(),@l2,@n) -> c_29() lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) matrixMult#1#(nil(),@m2) -> c_34() reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {1,2,5,11,17,19,21,23,24,26,29,34} by application of Pre({1,2,5,11,17,19,21,23,24,26,29,34}) = {3,8,15,16,20,22,25,27,30,31,32}. Here rules are labelled as follows: 1: *#(@x,@y) -> c_1(#mult#(@x,@y)) 2: +#(@x,@y) -> c_2(#add#(@x,@y)) 3: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) 4: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) 5: appendreverse#1#(nil(),@sofar) -> c_5() 6: bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) 7: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) 8: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) 9: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) 10: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) 11: bftMult'#3#(nil(),@acc,@queue) -> c_11() 12: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) 13: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) 14: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) 15: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) 16: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) 17: computeLine#1#(nil(),@acc,@m) -> c_17() 18: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) 19: computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 20: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) 21: dequeue#1#(::(@t,@ts),@inq) -> c_21() 22: dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) 23: dequeue#2#(::(@t,@ts)) -> c_23() 24: dequeue#2#(nil()) -> c_24() 25: enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) 26: enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 27: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) 28: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) 29: lineMult#1#(nil(),@l2,@n) -> c_29() 30: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) 31: lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) 32: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) 33: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) 34: matrixMult#1#(nil(),@m2) -> c_34() 35: reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) 36: #add#(#0(),@y) -> c_36() 37: #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) 38: #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 39: #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) 40: #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 41: #mult#(#0(),#0()) -> c_41() 42: #mult#(#0(),#neg(@y)) -> c_42() 43: #mult#(#0(),#pos(@y)) -> c_43() 44: #mult#(#neg(@x),#0()) -> c_44() 45: #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) 46: #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) 47: #mult#(#pos(@x),#0()) -> c_47() 48: #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) 49: #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) 50: #natmult#(#0(),@y) -> c_50() 51: #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) 52: #pred#(#0()) -> c_52() 53: #pred#(#neg(#s(@x))) -> c_53() 54: #pred#(#pos(#s(#0()))) -> c_54() 55: #pred#(#pos(#s(#s(@x)))) -> c_55() 56: #succ#(#0()) -> c_56() 57: #succ#(#neg(#s(#0()))) -> c_57() 58: #succ#(#neg(#s(#s(@x)))) -> c_58() 59: #succ#(#pos(#s(@x))) -> c_59() * Step 3: PredecessorEstimation WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#1#(nil(),@sofar) -> c_5() bftMult'#3#(nil(),@acc,@queue) -> c_11() computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#1#(nil(),@l2,@n) -> c_29() matrixMult#1#(nil(),@m2) -> c_34() - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: PredecessorEstimation {onSelection = all simple predecessor estimation selector} + Details: We estimate the number of application of {16} by application of Pre({16}) = {9}. Here rules are labelled as follows: 1: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) 2: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) 3: bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) 4: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) 5: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) 6: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) 7: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) 8: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) 9: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) 10: bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) 11: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) 12: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) 13: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) 14: dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) 15: dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) 16: enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) 17: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) 18: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) 19: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) 20: lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) 21: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) 22: matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) 23: reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) 24: #add#(#0(),@y) -> c_36() 25: #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) 26: #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 27: #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) 28: #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 29: #mult#(#0(),#0()) -> c_41() 30: #mult#(#0(),#neg(@y)) -> c_42() 31: #mult#(#0(),#pos(@y)) -> c_43() 32: #mult#(#neg(@x),#0()) -> c_44() 33: #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) 34: #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) 35: #mult#(#pos(@x),#0()) -> c_47() 36: #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) 37: #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) 38: #natmult#(#0(),@y) -> c_50() 39: #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) 40: #pred#(#0()) -> c_52() 41: #pred#(#neg(#s(@x))) -> c_53() 42: #pred#(#pos(#s(#0()))) -> c_54() 43: #pred#(#pos(#s(#s(@x)))) -> c_55() 44: #succ#(#0()) -> c_56() 45: #succ#(#neg(#s(#0()))) -> c_57() 46: #succ#(#neg(#s(#s(@x)))) -> c_58() 47: #succ#(#pos(#s(@x))) -> c_59() 48: *#(@x,@y) -> c_1(#mult#(@x,@y)) 49: +#(@x,@y) -> c_2(#add#(@x,@y)) 50: appendreverse#1#(nil(),@sofar) -> c_5() 51: bftMult'#3#(nil(),@acc,@queue) -> c_11() 52: computeLine#1#(nil(),@acc,@m) -> c_17() 53: computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 54: dequeue#1#(::(@t,@ts),@inq) -> c_21() 55: dequeue#2#(::(@t,@ts)) -> c_23() 56: dequeue#2#(nil()) -> c_24() 57: enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 58: lineMult#1#(nil(),@l2,@n) -> c_29() 59: matrixMult#1#(nil(),@m2) -> c_34() * Step 4: RemoveWeakSuffixes WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: #add#(#0(),@y) -> c_36() #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) #mult#(#0(),#0()) -> c_41() #mult#(#0(),#neg(@y)) -> c_42() #mult#(#0(),#pos(@y)) -> c_43() #mult#(#neg(@x),#0()) -> c_44() #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) #mult#(#pos(@x),#0()) -> c_47() #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) #natmult#(#0(),@y) -> c_50() #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) #pred#(#0()) -> c_52() #pred#(#neg(#s(@x))) -> c_53() #pred#(#pos(#s(#0()))) -> c_54() #pred#(#pos(#s(#s(@x)))) -> c_55() #succ#(#0()) -> c_56() #succ#(#neg(#s(#0()))) -> c_57() #succ#(#neg(#s(#s(@x)))) -> c_58() #succ#(#pos(#s(@x))) -> c_59() *#(@x,@y) -> c_1(#mult#(@x,@y)) +#(@x,@y) -> c_2(#add#(@x,@y)) appendreverse#1#(nil(),@sofar) -> c_5() bftMult'#3#(nil(),@acc,@queue) -> c_11() computeLine#1#(nil(),@acc,@m) -> c_17() computeLine#2#(nil(),@acc,@x,@xs) -> c_19() dequeue#1#(::(@t,@ts),@inq) -> c_21() dequeue#2#(::(@t,@ts)) -> c_23() dequeue#2#(nil()) -> c_24() enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() lineMult#1#(nil(),@l2,@n) -> c_29() matrixMult#1#(nil(),@m2) -> c_34() - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 -->_1 appendreverse#1#(nil(),@sofar) -> c_5():49 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 4:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_2 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6 -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):5 5:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):7 -->_1 bftMult'#3#(nil(),@acc,@queue) -> c_11():50 6:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):14 7:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)):9 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):8 8:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 9:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) -->_3 enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)):56 -->_2 enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)):56 -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)):10 10:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 11:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):12 -->_1 computeLine#1#(nil(),@acc,@m) -> c_17():51 12:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):13 -->_1 computeLine#2#(nil(),@acc,@x,@xs) -> c_19():52 13:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 14:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)):15 -->_1 dequeue#1#(::(@t,@ts),@inq) -> c_21():53 15:S:dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) -->_2 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22 -->_1 dequeue#2#(nil()) -> c_24():55 -->_1 dequeue#2#(::(@t,@ts)) -> c_23():54 16:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):17 -->_1 lineMult#1#(nil(),@l2,@n) -> c_29():58 17:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())):19 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)):18 18:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) -->_1 +#(@x,@y) -> c_2(#add#(@x,@y)):48 -->_2 *#(@x,@y) -> c_1(#mult#(@x,@y)):47 -->_3 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 19:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) -->_1 *#(@x,@y) -> c_1(#mult#(@x,@y)):47 -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 20:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):21 -->_1 matrixMult#1#(nil(),@m2) -> c_34():59 21:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 22:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 23:W:#add#(#0(),@y) -> c_36() 24:W:#add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) -->_1 #pred#(#pos(#s(#s(@x)))) -> c_55():42 -->_1 #pred#(#pos(#s(#0()))) -> c_54():41 -->_1 #pred#(#neg(#s(@x))) -> c_53():40 -->_1 #pred#(#0()) -> c_52():39 25:W:#add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) -->_2 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_2 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 -->_1 #pred#(#pos(#s(#s(@x)))) -> c_55():42 -->_1 #pred#(#pos(#s(#0()))) -> c_54():41 -->_1 #pred#(#neg(#s(@x))) -> c_53():40 -->_1 #pred#(#0()) -> c_52():39 26:W:#add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) -->_1 #succ#(#pos(#s(@x))) -> c_59():46 -->_1 #succ#(#neg(#s(#s(@x)))) -> c_58():45 -->_1 #succ#(#neg(#s(#0()))) -> c_57():44 -->_1 #succ#(#0()) -> c_56():43 27:W:#add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) -->_1 #succ#(#pos(#s(@x))) -> c_59():46 -->_1 #succ#(#neg(#s(#s(@x)))) -> c_58():45 -->_1 #succ#(#neg(#s(#0()))) -> c_57():44 -->_1 #succ#(#0()) -> c_56():43 -->_2 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_2 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 28:W:#mult#(#0(),#0()) -> c_41() 29:W:#mult#(#0(),#neg(@y)) -> c_42() 30:W:#mult#(#0(),#pos(@y)) -> c_43() 31:W:#mult#(#neg(@x),#0()) -> c_44() 32:W:#mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 33:W:#mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 34:W:#mult#(#pos(@x),#0()) -> c_47() 35:W:#mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 36:W:#mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) -->_1 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_1 #natmult#(#0(),@y) -> c_50():37 37:W:#natmult#(#0(),@y) -> c_50() 38:W:#natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) -->_2 #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)):38 -->_2 #natmult#(#0(),@y) -> c_50():37 -->_1 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_1 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 39:W:#pred#(#0()) -> c_52() 40:W:#pred#(#neg(#s(@x))) -> c_53() 41:W:#pred#(#pos(#s(#0()))) -> c_54() 42:W:#pred#(#pos(#s(#s(@x)))) -> c_55() 43:W:#succ#(#0()) -> c_56() 44:W:#succ#(#neg(#s(#0()))) -> c_57() 45:W:#succ#(#neg(#s(#s(@x)))) -> c_58() 46:W:#succ#(#pos(#s(@x))) -> c_59() 47:W:*#(@x,@y) -> c_1(#mult#(@x,@y)) -->_1 #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)):36 -->_1 #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)):35 -->_1 #mult#(#pos(@x),#0()) -> c_47():34 -->_1 #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)):33 -->_1 #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)):32 -->_1 #mult#(#neg(@x),#0()) -> c_44():31 -->_1 #mult#(#0(),#pos(@y)) -> c_43():30 -->_1 #mult#(#0(),#neg(@y)) -> c_42():29 -->_1 #mult#(#0(),#0()) -> c_41():28 48:W:+#(@x,@y) -> c_2(#add#(@x,@y)) -->_1 #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):27 -->_1 #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)):26 -->_1 #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)):25 -->_1 #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)):24 -->_1 #add#(#0(),@y) -> c_36():23 49:W:appendreverse#1#(nil(),@sofar) -> c_5() 50:W:bftMult'#3#(nil(),@acc,@queue) -> c_11() 51:W:computeLine#1#(nil(),@acc,@m) -> c_17() 52:W:computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 53:W:dequeue#1#(::(@t,@ts),@inq) -> c_21() 54:W:dequeue#2#(::(@t,@ts)) -> c_23() 55:W:dequeue#2#(nil()) -> c_24() 56:W:enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) -->_1 enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26():57 57:W:enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 58:W:lineMult#1#(nil(),@l2,@n) -> c_29() 59:W:matrixMult#1#(nil(),@m2) -> c_34() The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 50: bftMult'#3#(nil(),@acc,@queue) -> c_11() 59: matrixMult#1#(nil(),@m2) -> c_34() 51: computeLine#1#(nil(),@acc,@m) -> c_17() 52: computeLine#2#(nil(),@acc,@x,@xs) -> c_19() 58: lineMult#1#(nil(),@l2,@n) -> c_29() 48: +#(@x,@y) -> c_2(#add#(@x,@y)) 23: #add#(#0(),@y) -> c_36() 24: #add#(#neg(#s(#0())),@y) -> c_37(#pred#(@y)) 25: #add#(#neg(#s(#s(@x))),@y) -> c_38(#pred#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 39: #pred#(#0()) -> c_52() 40: #pred#(#neg(#s(@x))) -> c_53() 41: #pred#(#pos(#s(#0()))) -> c_54() 42: #pred#(#pos(#s(#s(@x)))) -> c_55() 47: *#(@x,@y) -> c_1(#mult#(@x,@y)) 28: #mult#(#0(),#0()) -> c_41() 29: #mult#(#0(),#neg(@y)) -> c_42() 30: #mult#(#0(),#pos(@y)) -> c_43() 31: #mult#(#neg(@x),#0()) -> c_44() 32: #mult#(#neg(@x),#neg(@y)) -> c_45(#natmult#(@x,@y)) 33: #mult#(#neg(@x),#pos(@y)) -> c_46(#natmult#(@x,@y)) 34: #mult#(#pos(@x),#0()) -> c_47() 35: #mult#(#pos(@x),#neg(@y)) -> c_48(#natmult#(@x,@y)) 36: #mult#(#pos(@x),#pos(@y)) -> c_49(#natmult#(@x,@y)) 38: #natmult#(#s(@x),@y) -> c_51(#add#(#pos(@y),#natmult(@x,@y)),#natmult#(@x,@y)) 27: #add#(#pos(#s(#s(@x))),@y) -> c_40(#succ#(#add(#pos(#s(@x)),@y)),#add#(#pos(#s(@x)),@y)) 26: #add#(#pos(#s(#0())),@y) -> c_39(#succ#(@y)) 43: #succ#(#0()) -> c_56() 44: #succ#(#neg(#s(#0()))) -> c_57() 45: #succ#(#neg(#s(#s(@x)))) -> c_58() 46: #succ#(#pos(#s(@x))) -> c_59() 37: #natmult#(#0(),@y) -> c_50() 56: enqueue#(@t,@queue) -> c_25(enqueue#1#(@queue,@t)) 57: enqueue#1#(tuple#2(@outq,@inq),@t) -> c_26() 53: dequeue#1#(::(@t,@ts),@inq) -> c_21() 54: dequeue#2#(::(@t,@ts)) -> c_23() 55: dequeue#2#(nil()) -> c_24() 49: appendreverse#1#(nil(),@sofar) -> c_5() * Step 5: SimplifyRHS WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/3,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/2,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/3,c_31/2,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 4:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_2 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6 -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):5 5:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):7 6:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):14 7:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)):9 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):8 8:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 9:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) ,enqueue#(@t2,enqueue(@t1,@queue)) ,enqueue#(@t1,@queue)) -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)) ,matrixMult#(@acc,@y)):10 10:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 11:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):12 12:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):13 13:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 14:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)):15 15:S:dequeue#1#(nil(),@inq) -> c_22(dequeue#2#(reverse(@inq)),reverse#(@inq)) -->_2 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22 16:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):17 17:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())):19 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)):18 18:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(+#(*(@x,@n),@y),*#(@x,@n),lineMult#(@n,@xs,@ys)) -->_3 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 19:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(*#(@x,@n),lineMult#(@n,@xs,nil())) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 20:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):21 21:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 22:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) * Step 6: UsableRules WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult(@t,@acc) -> bftMult'(tuple#2(::(@t,nil()),nil()),@acc) bftMult'(@queue,@acc) -> bftMult'#1(bftMult'#2(@queue),@acc) bftMult'#1(tuple#2(@elem,@queue),@acc) -> bftMult'#3(@elem,@acc,@queue) bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) bftMult'#3(::(@t,@_@3),@acc,@queue) -> bftMult'#4(@t,@acc,@queue) bftMult'#3(nil(),@acc,@queue) -> @acc bftMult'#4(leaf(),@acc,@queue) -> bftMult'(@queue,@acc) bftMult'#4(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5(@queue',@acc,@y) -> bftMult'(@queue',matrixMult(@acc,@y)) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: UsableRules + Details: We replace rewrite rules by usable rules: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) * Step 7: RemoveHeads WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveHeads + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 4:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_2 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):6 -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):5 5:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):7 6:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):14 7:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y)):9 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):8 8:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 9:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)) ,matrixMult#(@acc,@y)):10 10:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):4 11:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):12 12:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):13 13:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_2 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 14:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):15 15:S:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) -->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):22 16:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):17 17:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())):19 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):18 18:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 19:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):16 20:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):21 21:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):20 -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):11 22:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). [(3,bftMult#(@t,@acc) -> c_6(bftMult'#(tuple#2(::(@t,nil()),nil()),@acc)))] * Step 8: DecomposeDG WORST_CASE(?,O(n^5)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) and a lower component appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) Further, following extension rules are added to the lower component. bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) ** Step 8.a:1: SimplifyRHS WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)):2 2:S:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)):3 3:S:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y)):5 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)):4 4:S:bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1 5:S:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) -->_1 bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)):6 6:S:bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y)),matrixMult#(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc),bftMult'#2#(@queue)):1 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) ** Step 8.a:2: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(2) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(11) #add :: ["A"(0) x "A"(4)] -(0)-> "A"(4) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(8) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(4) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(2) #neg :: ["A"(0)] -(0)-> "A"(8) #neg :: ["A"(0)] -(0)-> "A"(9) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(2) #pos :: ["A"(0)] -(0)-> "A"(11) #pos :: ["A"(0)] -(0)-> "A"(5) #pos :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(10) #pos :: ["A"(0)] -(0)-> "A"(4) #pred :: ["A"(0)] -(0)-> "A"(5) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(10) #s :: ["A"(0)] -(0)-> "A"(1) #succ :: ["A"(2)] -(0)-> "A"(8) * :: ["A"(0) x "A"(0)] -(0)-> "A"(5) + :: ["A"(1) x "A"(4)] -(0)-> "A"(4) :: :: ["A"(6) x "A"(6)] -(0)-> "A"(6) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(4) x "A"(4)] -(0)-> "A"(4) :: :: ["A"(3) x "A"(3)] -(0)-> "A"(3) appendreverse :: ["A"(6) x "A"(6)] -(0)-> "A"(6) appendreverse#1 :: ["A"(6) x "A"(6)] -(0)-> "A"(6) bftMult'#2 :: ["A"(6)] -(6)-> "A"(6) computeLine :: ["A"(0) x "A"(0) x "A"(4)] -(0)-> "A"(4) computeLine#1 :: ["A"(0) x "A"(4) x "A"(0)] -(0)-> "A"(4) computeLine#2 :: ["A"(0) x "A"(4) x "A"(0) x "A"(0)] -(0)-> "A"(4) dequeue :: ["A"(6) x "A"(6)] -(12)-> "A"(6) dequeue#1 :: ["A"(6) x "A"(6)] -(12)-> "A"(6) dequeue#2 :: ["A"(6)] -(12)-> "A"(6) enqueue :: ["A"(6) x "A"(6)] -(0)-> "A"(6) enqueue#1 :: ["A"(6) x "A"(6)] -(0)-> "A"(6) leaf :: [] -(0)-> "A"(6) lineMult :: ["A"(0) x "A"(0) x "A"(4)] -(0)-> "A"(4) lineMult#1 :: ["A"(0) x "A"(4) x "A"(0)] -(0)-> "A"(4) lineMult#2 :: ["A"(4) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(4) matrixMult :: ["A"(0) x "A"(1)] -(0)-> "A"(3) matrixMult#1 :: ["A"(0) x "A"(1)] -(0)-> "A"(3) nil :: [] -(0)-> "A"(6) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(4) nil :: [] -(0)-> "A"(11) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(13) nil :: [] -(0)-> "A"(5) node :: ["A"(6) x "A"(6) x "A"(6)] -(6)-> "A"(6) reverse :: ["A"(6)] -(0)-> "A"(6) tuple#2 :: ["A"(6) x "A"(6)] -(6)-> "A"(6) bftMult'# :: ["A"(6) x "A"(3)] -(8)-> "A"(0) bftMult'#1# :: ["A"(6) x "A"(3)] -(2)-> "A"(13) bftMult'#3# :: ["A"(6) x "A"(3) x "A"(6)] -(8)-> "A"(12) bftMult'#4# :: ["A"(6) x "A"(3) x "A"(6)] -(8)-> "A"(13) bftMult'#5# :: ["A"(6) x "A"(3) x "A"(2)] -(9)-> "A"(9) c_7 :: ["A"(0)] -(0)-> "A"(12) c_8 :: ["A"(0)] -(0)-> "A"(15) c_10 :: ["A"(13)] -(0)-> "A"(13) c_12 :: ["A"(0)] -(0)-> "A"(15) c_13 :: ["A"(0)] -(0)-> "A"(15) c_14 :: ["A"(0)] -(0)-> "A"(11) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) "c_10_A" :: ["A"(0)] -(0)-> "A"(1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1) "c_14_A" :: ["A"(0)] -(0)-> "A"(1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) 2. Weak: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) ** Step 8.a:3: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) - Weak DPs: bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(10) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(13) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(5) #add :: ["A"(10) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(10) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(10) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(12) #neg :: ["A"(0)] -(0)-> "A"(14) #neg :: ["A"(0)] -(0)-> "A"(8) #neg :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(10) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(15) #pred :: ["A"(0)] -(0)-> "A"(3) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(8) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(10) #succ :: ["A"(0)] -(0)-> "A"(7) * :: ["A"(0) x "A"(0)] -(0)-> "A"(10) + :: ["A"(10) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(2) x "A"(2)] -(2)-> "A"(2) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse :: ["A"(2) x "A"(2)] -(0)-> "A"(2) appendreverse#1 :: ["A"(2) x "A"(2)] -(0)-> "A"(2) bftMult'#2 :: ["A"(2)] -(0)-> "A"(2) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(2) x "A"(2)] -(0)-> "A"(2) dequeue#1 :: ["A"(2) x "A"(2)] -(0)-> "A"(2) dequeue#2 :: ["A"(2)] -(0)-> "A"(2) enqueue :: ["A"(2) x "A"(2)] -(2)-> "A"(2) enqueue#1 :: ["A"(2) x "A"(2)] -(2)-> "A"(2) leaf :: [] -(0)-> "A"(2) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(2) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) node :: ["A"(0) x "A"(2) x "A"(2)] -(2)-> "A"(2) reverse :: ["A"(2)] -(0)-> "A"(2) tuple#2 :: ["A"(2) x "A"(2)] -(0)-> "A"(2) tuple#2 :: ["A"(10) x "A"(10)] -(0)-> "A"(10) tuple#2 :: ["A"(15) x "A"(15)] -(0)-> "A"(15) bftMult'# :: ["A"(2) x "A"(0)] -(0)-> "A"(14) bftMult'#1# :: ["A"(2) x "A"(0)] -(0)-> "A"(13) bftMult'#3# :: ["A"(2) x "A"(0) x "A"(2)] -(0)-> "A"(12) bftMult'#4# :: ["A"(2) x "A"(0) x "A"(2)] -(2)-> "A"(12) bftMult'#5# :: ["A"(2) x "A"(0) x "A"(0)] -(0)-> "A"(9) c_7 :: ["A"(0)] -(0)-> "A"(14) c_8 :: ["A"(0)] -(0)-> "A"(15) c_10 :: ["A"(0)] -(0)-> "A"(15) c_12 :: ["A"(13)] -(0)-> "A"(13) c_13 :: ["A"(0)] -(0)-> "A"(15) c_14 :: ["A"(0)] -(0)-> "A"(15) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_10_A" :: ["A"(0)] -(0)-> "A"(1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1) "c_14_A" :: ["A"(0)] -(0)-> "A"(1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(0) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) 2. Weak: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) ** Step 8.a:4: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) - Weak DPs: bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0, 0) #0 :: [] -(0)-> "A"(8, 12) #0 :: [] -(0)-> "A"(12, 12) #0 :: [] -(0)-> "A"(10, 12) #0 :: [] -(0)-> "A"(8, 8) #0 :: [] -(0)-> "A"(15, 15) #0 :: [] -(0)-> "A"(4, 12) #0 :: [] -(0)-> "A"(10, 14) #add :: ["A"(0, 0) x "A"(0, 8)] -(0)-> "A"(0, 8) #mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(4, 9) #natmult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 8) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(15, 11) #neg :: ["A"(0, 0)] -(0)-> "A"(7, 13) #neg :: ["A"(0, 0)] -(0)-> "A"(10, 9) #neg :: ["A"(0, 0)] -(0)-> "A"(1, 9) #neg :: ["A"(0, 0)] -(0)-> "A"(12, 9) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(14, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(15, 15) #pos :: ["A"(0, 0)] -(0)-> "A"(13, 13) #pos :: ["A"(0, 0)] -(0)-> "A"(7, 13) #pos :: ["A"(0, 0)] -(0)-> "A"(14, 10) #pos :: ["A"(0, 0)] -(0)-> "A"(5, 10) #pos :: ["A"(0, 0)] -(0)-> "A"(3, 11) #pred :: ["A"(0, 0)] -(0)-> "A"(1, 9) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(4, 2) #s :: ["A"(0, 0)] -(0)-> "A"(0, 8) #succ :: ["A"(0, 0)] -(0)-> "A"(3, 8) * :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(4, 9) + :: ["A"(4, 1) x "A"(0, 8)] -(0)-> "A"(0, 8) :: :: ["A"(0, 7) x "A"(1, 7)] -(1)-> "A"(1, 7) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(0, 8) x "A"(0, 8)] -(0)-> "A"(0, 8) :: :: ["A"(0, 4) x "A"(1, 4)] -(1)-> "A"(1, 4) :: :: ["A"(0, 8) x "A"(1, 8)] -(1)-> "A"(1, 8) appendreverse :: ["A"(1, 7) x "A"(1, 7)] -(0)-> "A"(1, 7) appendreverse#1 :: ["A"(1, 7) x "A"(1, 7)] -(0)-> "A"(1, 7) bftMult'#2 :: ["A"(1, 7)] -(0)-> "A"(1, 7) computeLine :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 8)] -(0)-> "A"(0, 8) computeLine#1 :: ["A"(0, 0) x "A"(0, 8) x "A"(0, 0)] -(0)-> "A"(0, 8) computeLine#2 :: ["A"(0, 0) x "A"(0, 8) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 8) dequeue :: ["A"(1, 7) x "A"(1, 7)] -(0)-> "A"(1, 7) dequeue#1 :: ["A"(1, 7) x "A"(1, 7)] -(0)-> "A"(1, 7) dequeue#2 :: ["A"(1, 7)] -(0)-> "A"(1, 7) enqueue :: ["A"(0, 7) x "A"(1, 7)] -(1)-> "A"(1, 7) enqueue#1 :: ["A"(1, 7) x "A"(0, 7)] -(1)-> "A"(1, 7) leaf :: [] -(0)-> "A"(0, 7) lineMult :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 8)] -(0)-> "A"(0, 8) lineMult#1 :: ["A"(0, 0) x "A"(0, 8) x "A"(0, 0)] -(0)-> "A"(0, 8) lineMult#2 :: ["A"(0, 8) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 8) matrixMult :: ["A"(1, 4) x "A"(0, 4)] -(5)-> "A"(1, 8) matrixMult#1 :: ["A"(1, 4) x "A"(0, 4)] -(5)-> "A"(1, 8) nil :: [] -(0)-> "A"(1, 7) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(0, 8) nil :: [] -(0)-> "A"(1, 4) nil :: [] -(0)-> "A"(4, 8) nil :: [] -(0)-> "A"(11, 12) nil :: [] -(0)-> "A"(13, 15) nil :: [] -(0)-> "A"(4, 15) nil :: [] -(0)-> "A"(15, 14) nil :: [] -(0)-> "A"(15, 11) nil :: [] -(0)-> "A"(8, 8) nil :: [] -(0)-> "A"(1, 8) nil :: [] -(0)-> "A"(12, 8) nil :: [] -(0)-> "A"(14, 12) node :: ["A"(0, 7) x "A"(0, 7) x "A"(0, 7)] -(7)-> "A"(0, 7) reverse :: ["A"(1, 7)] -(0)-> "A"(1, 7) tuple#2 :: ["A"(1, 7) x "A"(1, 7)] -(0)-> "A"(1, 7) tuple#2 :: ["A"(7, 7) x "A"(7, 7)] -(0)-> "A"(7, 7) tuple#2 :: ["A"(8, 7) x "A"(8, 7)] -(0)-> "A"(8, 7) bftMult'# :: ["A"(1, 7) x "A"(1, 8)] -(0)-> "A"(8, 1) bftMult'#1# :: ["A"(1, 7) x "A"(1, 8)] -(0)-> "A"(0, 2) bftMult'#3# :: ["A"(1, 7) x "A"(1, 8) x "A"(1, 7)] -(0)-> "A"(15, 7) bftMult'#4# :: ["A"(0, 7) x "A"(1, 8) x "A"(1, 7)] -(0)-> "A"(15, 15) bftMult'#5# :: ["A"(1, 7) x "A"(1, 7) x "A"(0, 5)] -(5)-> "A"(0, 0) c_7 :: ["A"(0, 0)] -(0)-> "A"(12, 6) c_8 :: ["A"(0, 0)] -(0)-> "A"(0, 2) c_10 :: ["A"(7, 7)] -(0)-> "A"(15, 7) c_12 :: ["A"(0, 0)] -(0)-> "A"(15, 15) c_13 :: ["A"(0, 0)] -(0)-> "A"(15, 15) c_14 :: ["A"(0, 0)] -(0)-> "A"(0, 0) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1, 0) "#0_A" :: [] -(0)-> "A"(0, 1) "#neg_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#neg_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "#pos_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#pos_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "#s_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#s_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "::_A" :: ["A"(0, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) "::_A" :: ["A"(0, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) "c_10_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_10_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_12_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_13_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_14_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_14_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_7_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_8_A" :: ["A"(0)] -(0)-> "A"(0, 1) "leaf_A" :: [] -(0)-> "A"(1, 0) "leaf_A" :: [] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "node_A" :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(1, 0) "node_A" :: ["A"(0, 1) x "A"(0, 1) x "A"(0, 1)] -(1)-> "A"(0, 1) "tuple#2_A" :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) "tuple#2_A" :: ["A"(0, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) 2. Weak: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) ** Step 8.a:5: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) - Weak DPs: bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(2, 0) #0 :: [] -(0)-> "A"(0, 0) #0 :: [] -(0)-> "A"(4, 0) #0 :: [] -(0)-> "A"(8, 2) #0 :: [] -(0)-> "A"(10, 8) #0 :: [] -(0)-> "A"(9, 8) #0 :: [] -(0)-> "A"(12, 8) #0 :: [] -(0)-> "A"(8, 13) #0 :: [] -(0)-> "A"(12, 12) #0 :: [] -(0)-> "A"(8, 12) #0 :: [] -(0)-> "A"(12, 14) #add :: ["A"(2, 0) x "A"(8, 8)] -(0)-> "A"(8, 8) #mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(9, 8) #natmult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(8, 8) #neg :: ["A"(0, 0)] -(0)-> "A"(2, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(4, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(8, 2) #neg :: ["A"(0, 0)] -(0)-> "A"(9, 9) #neg :: ["A"(0, 0)] -(0)-> "A"(9, 8) #neg :: ["A"(0, 0)] -(0)-> "A"(8, 8) #neg :: ["A"(0, 0)] -(0)-> "A"(8, 13) #pos :: ["A"(0, 0)] -(0)-> "A"(2, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(4, 0) #pos :: ["A"(0, 2)] -(0)-> "A"(8, 2) #pos :: ["A"(0, 2)] -(0)-> "A"(5, 2) #pos :: ["A"(0, 0)] -(0)-> "A"(12, 0) #pos :: ["A"(0, 8)] -(0)-> "A"(10, 8) #pos :: ["A"(0, 8)] -(0)-> "A"(15, 8) #pos :: ["A"(0, 0)] -(0)-> "A"(11, 0) #pos :: ["A"(0, 8)] -(0)-> "A"(11, 8) #pos :: ["A"(0, 11)] -(0)-> "A"(10, 11) #pos :: ["A"(0, 12)] -(0)-> "A"(8, 12) #pred :: ["A"(4, 0)] -(0)-> "A"(8, 8) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 2) #s :: ["A"(0, 0)] -(0)-> "A"(0, 4) #s :: ["A"(0, 0)] -(0)-> "A"(0, 8) #s :: ["A"(0, 0)] -(0)-> "A"(0, 3) #s :: ["A"(10, 0)] -(0)-> "A"(10, 14) #s :: ["A"(0, 0)] -(0)-> "A"(0, 14) #succ :: ["A"(8, 2)] -(0)-> "A"(8, 8) * :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(9, 8) + :: ["A"(5, 8) x "A"(8, 8)] -(0)-> "A"(8, 8) :: :: ["A"(3, 1) x "A"(2, 1)] -(2)-> "A"(2, 1) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(8, 8) x "A"(0, 8)] -(0)-> "A"(0, 8) appendreverse :: ["A"(2, 1) x "A"(2, 1)] -(0)-> "A"(2, 1) appendreverse#1 :: ["A"(2, 1) x "A"(2, 1)] -(0)-> "A"(2, 1) bftMult'#2 :: ["A"(2, 1)] -(1)-> "A"(2, 1) computeLine :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 8)] -(0)-> "A"(0, 4) computeLine#1 :: ["A"(0, 0) x "A"(0, 8) x "A"(0, 0)] -(0)-> "A"(0, 4) computeLine#2 :: ["A"(0, 0) x "A"(0, 8) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 4) dequeue :: ["A"(2, 1) x "A"(2, 1)] -(2)-> "A"(2, 1) dequeue#1 :: ["A"(2, 1) x "A"(2, 1)] -(2)-> "A"(2, 1) dequeue#2 :: ["A"(2, 1)] -(2)-> "A"(2, 1) enqueue :: ["A"(3, 1) x "A"(2, 1)] -(2)-> "A"(2, 1) enqueue#1 :: ["A"(2, 1) x "A"(3, 1)] -(2)-> "A"(2, 1) leaf :: [] -(0)-> "A"(3, 1) lineMult :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 8)] -(0)-> "A"(0, 8) lineMult#1 :: ["A"(0, 0) x "A"(0, 8) x "A"(0, 0)] -(0)-> "A"(0, 8) lineMult#2 :: ["A"(0, 8) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 8) matrixMult :: ["A"(0, 0) x "A"(1, 0)] -(0)-> "A"(0, 0) matrixMult#1 :: ["A"(0, 0) x "A"(1, 0)] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(2, 1) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(0, 8) nil :: [] -(0)-> "A"(8, 5) nil :: [] -(0)-> "A"(4, 12) nil :: [] -(0)-> "A"(12, 12) nil :: [] -(0)-> "A"(14, 13) nil :: [] -(0)-> "A"(12, 14) nil :: [] -(0)-> "A"(12, 13) nil :: [] -(0)-> "A"(15, 13) nil :: [] -(0)-> "A"(8, 14) nil :: [] -(0)-> "A"(12, 8) nil :: [] -(0)-> "A"(12, 10) node :: ["A"(1, 1) x "A"(3, 1) x "A"(3, 1)] -(3)-> "A"(3, 1) reverse :: ["A"(2, 1)] -(0)-> "A"(2, 1) tuple#2 :: ["A"(2, 1) x "A"(2, 1)] -(1)-> "A"(2, 1) tuple#2 :: ["A"(9, 1) x "A"(9, 1)] -(1)-> "A"(9, 1) tuple#2 :: ["A"(12, 1) x "A"(12, 1)] -(1)-> "A"(12, 1) bftMult'# :: ["A"(2, 1) x "A"(0, 0)] -(1)-> "A"(0, 0) bftMult'#1# :: ["A"(2, 1) x "A"(0, 0)] -(0)-> "A"(5, 12) bftMult'#3# :: ["A"(2, 1) x "A"(0, 0) x "A"(2, 1)] -(0)-> "A"(4, 12) bftMult'#4# :: ["A"(3, 1) x "A"(0, 0) x "A"(2, 1)] -(2)-> "A"(13, 12) bftMult'#5# :: ["A"(2, 1) x "A"(0, 0) x "A"(1, 1)] -(1)-> "A"(5, 9) c_7 :: ["A"(0, 0)] -(0)-> "A"(4, 12) c_8 :: ["A"(0, 0)] -(0)-> "A"(7, 14) c_10 :: ["A"(13, 0)] -(0)-> "A"(10, 13) c_12 :: ["A"(0, 0)] -(0)-> "A"(14, 14) c_13 :: ["A"(0, 0)] -(0)-> "A"(15, 15) c_14 :: ["A"(0, 0)] -(0)-> "A"(7, 9) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1, 0) "#0_A" :: [] -(0)-> "A"(0, 1) "#neg_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#neg_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "#pos_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#pos_A" :: ["A"(0, 1)] -(0)-> "A"(0, 1) "#s_A" :: ["A"(1, 0)] -(0)-> "A"(1, 0) "#s_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "::_A" :: ["A"(1, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) "::_A" :: ["A"(1, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) "c_10_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_10_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_12_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_13_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_14_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_14_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_7_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_8_A" :: ["A"(0)] -(0)-> "A"(0, 1) "leaf_A" :: [] -(0)-> "A"(1, 0) "leaf_A" :: [] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "node_A" :: ["A"(0, 0) x "A"(1, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) "node_A" :: ["A"(1, 1) x "A"(0, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) "tuple#2_A" :: ["A"(0, 1) x "A"(0, 1)] -(1)-> "A"(0, 1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) 2. Weak: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) ** Step 8.a:6: Ara WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) - Weak DPs: bftMult'#1#(tuple#2(@elem,@queue),@acc) -> c_8(bftMult'#3#(@elem,@acc,@queue)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> c_10(bftMult'#4#(@t,@acc,@queue)) bftMult'#4#(leaf(),@acc,@queue) -> c_12(bftMult'#(@queue,@acc)) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> c_13(bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> c_14(bftMult'#(@queue',matrixMult(@acc,@y))) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/1,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/1,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(4, 0) #0 :: [] -(0)-> "A"(0, 0) #0 :: [] -(0)-> "A"(4, 8) #0 :: [] -(0)-> "A"(12, 12) #0 :: [] -(0)-> "A"(15, 8) #0 :: [] -(0)-> "A"(12, 8) #0 :: [] -(0)-> "A"(12, 1) #add :: ["A"(4, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) #mult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(4, 0) #natmult :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(4, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(0, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(12, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(10, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(14, 0) #neg :: ["A"(0, 0)] -(0)-> "A"(9, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(4, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(0, 0) #pos :: ["A"(0, 0)] -(0)-> "A"(12, 13) #pos :: ["A"(0, 0)] -(0)-> "A"(11, 13) #pos :: ["A"(0, 0)] -(0)-> "A"(12, 15) #pos :: ["A"(0, 0)] -(0)-> "A"(9, 9) #pos :: ["A"(0, 0)] -(0)-> "A"(11, 1) #pos :: ["A"(0, 0)] -(0)-> "A"(12, 12) #pred :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(0, 0) #s :: ["A"(0, 0)] -(0)-> "A"(4, 12) #s :: ["A"(0, 0)] -(0)-> "A"(14, 4) #s :: ["A"(0, 0)] -(0)-> "A"(15, 10) #s :: ["A"(0, 0)] -(0)-> "A"(12, 12) #s :: ["A"(0, 0)] -(0)-> "A"(7, 5) #s :: ["A"(0, 0)] -(0)-> "A"(9, 2) #s :: ["A"(0, 0)] -(0)-> "A"(10, 14) #s :: ["A"(0, 0)] -(0)-> "A"(14, 1) #succ :: ["A"(0, 0)] -(0)-> "A"(0, 0) * :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(4, 0) + :: ["A"(4, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(8, 0) x "A"(8, 2)] -(2)-> "A"(8, 2) :: :: ["A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) :: :: ["A"(8, 0) x "A"(8, 1)] -(1)-> "A"(8, 1) appendreverse :: ["A"(8, 2) x "A"(8, 2)] -(0)-> "A"(8, 2) appendreverse#1 :: ["A"(8, 2) x "A"(8, 2)] -(0)-> "A"(8, 2) bftMult'#2 :: ["A"(8, 2)] -(0)-> "A"(8, 2) computeLine :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) computeLine#1 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) computeLine#2 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) dequeue :: ["A"(8, 2) x "A"(8, 2)] -(0)-> "A"(8, 2) dequeue#1 :: ["A"(8, 2) x "A"(8, 2)] -(0)-> "A"(8, 2) dequeue#2 :: ["A"(8, 2)] -(0)-> "A"(8, 2) enqueue :: ["A"(8, 0) x "A"(8, 2)] -(2)-> "A"(8, 2) enqueue#1 :: ["A"(8, 2) x "A"(8, 0)] -(2)-> "A"(8, 2) leaf :: [] -(0)-> "A"(8, 0) lineMult :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) lineMult#1 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) lineMult#2 :: ["A"(0, 0) x "A"(0, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 0) matrixMult :: ["A"(0, 0) x "A"(8, 0)] -(0)-> "A"(0, 0) matrixMult#1 :: ["A"(0, 0) x "A"(8, 0)] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(8, 2) nil :: [] -(0)-> "A"(0, 0) nil :: [] -(0)-> "A"(10, 8) nil :: [] -(0)-> "A"(14, 15) nil :: [] -(0)-> "A"(14, 14) nil :: [] -(0)-> "A"(14, 6) nil :: [] -(0)-> "A"(15, 15) nil :: [] -(0)-> "A"(11, 8) nil :: [] -(0)-> "A"(7, 12) nil :: [] -(0)-> "A"(14, 12) nil :: [] -(0)-> "A"(8, 8) nil :: [] -(0)-> "A"(12, 15) node :: ["A"(8, 0) x "A"(8, 0) x "A"(8, 0)] -(8)-> "A"(8, 0) reverse :: ["A"(8, 2)] -(0)-> "A"(8, 2) tuple#2 :: ["A"(8, 2) x "A"(8, 2)] -(0)-> "A"(8, 2) tuple#2 :: ["A"(14, 4) x "A"(14, 4)] -(0)-> "A"(14, 4) tuple#2 :: ["A"(15, 15) x "A"(15, 15)] -(0)-> "A"(15, 15) bftMult'# :: ["A"(8, 2) x "A"(0, 0)] -(3)-> "A"(0, 2) bftMult'#1# :: ["A"(8, 2) x "A"(0, 0)] -(2)-> "A"(5, 12) bftMult'#3# :: ["A"(8, 1) x "A"(0, 0) x "A"(8, 2)] -(2)-> "A"(1, 9) bftMult'#4# :: ["A"(8, 0) x "A"(0, 0) x "A"(8, 2)] -(3)-> "A"(4, 13) bftMult'#5# :: ["A"(8, 2) x "A"(0, 0) x "A"(8, 0)] -(3)-> "A"(0, 8) c_7 :: ["A"(1, 2)] -(0)-> "A"(1, 2) c_8 :: ["A"(0, 0)] -(0)-> "A"(5, 12) c_10 :: ["A"(1, 11)] -(0)-> "A"(1, 11) c_12 :: ["A"(0, 0)] -(0)-> "A"(5, 15) c_13 :: ["A"(0, 0)] -(0)-> "A"(5, 13) c_14 :: ["A"(0, 0)] -(0)-> "A"(0, 10) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1, 0) "#0_A" :: [] -(0)-> "A"(0, 1) "#neg_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#neg_A" :: ["A"(0, 0)] -(1)-> "A"(0, 1) "#pos_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#pos_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "#s_A" :: ["A"(0, 0)] -(0)-> "A"(1, 0) "#s_A" :: ["A"(0, 0)] -(0)-> "A"(0, 1) "::_A" :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) "::_A" :: ["A"(0, 0) x "A"(0, 1)] -(1)-> "A"(0, 1) "c_10_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_10_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_12_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_12_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_13_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_13_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_14_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_14_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_7_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_7_A" :: ["A"(0)] -(0)-> "A"(0, 1) "c_8_A" :: ["A"(0)] -(0)-> "A"(1, 0) "c_8_A" :: ["A"(0)] -(0)-> "A"(0, 1) "leaf_A" :: [] -(0)-> "A"(1, 0) "leaf_A" :: [] -(0)-> "A"(0, 1) "nil_A" :: [] -(0)-> "A"(1, 0) "nil_A" :: [] -(0)-> "A"(0, 1) "node_A" :: ["A"(1, 0) x "A"(1, 0) x "A"(1, 0)] -(1)-> "A"(1, 0) "node_A" :: ["A"(1, 0) x "A"(0, 0) x "A"(0, 0)] -(0)-> "A"(0, 1) "tuple#2_A" :: ["A"(1, 0) x "A"(1, 0)] -(0)-> "A"(1, 0) "tuple#2_A" :: ["A"(0, 1) x "A"(0, 1)] -(0)-> "A"(0, 1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bftMult'#(@queue,@acc) -> c_7(bftMult'#1#(bftMult'#2(@queue),@acc)) 2. Weak: ** Step 8.b:1: DecomposeDG WORST_CASE(?,O(n^3)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) and a lower component computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) Further, following extension rules are added to the lower component. appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) *** Step 8.b:1.a:1: SimplifyRHS WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))):2 2:S:appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 3:S:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) -->_1 dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)):4 4:S:dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) -->_1 dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)):5 5:S:dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) -->_1 reverse#(@xs) -> c_35(appendreverse#(@xs,nil())):8 6:S:matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)):7 7:S:matrixMult#1#(::(@l,@ls),@m2) -> c_33(computeLine#(@l,@m2,nil()),matrixMult#(@ls,@m2)) -->_2 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):6 8:S:reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) -->_1 appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)):1 9:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):11 10:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) -->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)):3 11:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):12 12:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):14 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):13 13:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):10 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):9 14:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):16 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):15 15:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):10 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):9 16:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)):6 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) *** Step 8.b:1.a:2: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0) #add :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(0) #pred :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(0) #succ :: ["A"(0)] -(0)-> "A"(0) * :: ["A"(0) x "A"(0)] -(0)-> "A"(0) + :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) bftMult'#2 :: ["A"(0)] -(0)-> "A"(0) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(0) x "A"(0)] -(0)-> "A"(0) dequeue#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) dequeue#2 :: ["A"(0)] -(0)-> "A"(0) enqueue :: ["A"(0) x "A"(0)] -(0)-> "A"(0) enqueue#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) leaf :: [] -(0)-> "A"(0) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(0) node :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) reverse :: ["A"(0)] -(0)-> "A"(0) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse# :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse#1# :: ["A"(0) x "A"(0)] -(0)-> "A"(0) bftMult'# :: ["A"(0) x "A"(0)] -(4)-> "A"(0) bftMult'#1# :: ["A"(0) x "A"(0)] -(4)-> "A"(0) bftMult'#2# :: ["A"(0)] -(4)-> "A"(0) bftMult'#3# :: ["A"(0) x "A"(0) x "A"(0)] -(4)-> "A"(0) bftMult'#4# :: ["A"(0) x "A"(0) x "A"(0)] -(4)-> "A"(0) bftMult'#5# :: ["A"(0) x "A"(0) x "A"(0)] -(4)-> "A"(0) dequeue# :: ["A"(0) x "A"(0)] -(3)-> "A"(0) dequeue#1# :: ["A"(0) x "A"(0)] -(2)-> "A"(0) matrixMult# :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1# :: ["A"(0) x "A"(0)] -(0)-> "A"(0) reverse# :: ["A"(0)] -(1)-> "A"(0) c_3 :: ["A"(0)] -(0)-> "A"(0) c_4 :: ["A"(0)] -(0)-> "A"(0) c_9 :: ["A"(0)] -(0)-> "A"(0) c_20 :: ["A"(0)] -(0)-> "A"(0) c_22 :: ["A"(0)] -(0)-> "A"(0) c_32 :: ["A"(0)] -(0)-> "A"(0) c_33 :: ["A"(0)] -(0)-> "A"(0) c_35 :: ["A"(0)] -(0)-> "A"(0) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) 2. Weak: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) *** Step 8.b:1.a:3: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(13) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #add :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(7) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(15) #neg :: ["A"(0)] -(0)-> "A"(4) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(9) #pos :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(7) #pos :: ["A"(0)] -(0)-> "A"(8) #pos :: ["A"(0)] -(0)-> "A"(12) #pred :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(1) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(7) #s :: ["A"(0)] -(0)-> "A"(5) #succ :: ["A"(0)] -(0)-> "A"(1) * :: ["A"(0) x "A"(0)] -(0)-> "A"(7) + :: ["A"(1) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(1)] -(1)-> "A"(1) :: :: ["A"(0) x "A"(12)] -(12)-> "A"(12) appendreverse :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) bftMult'#2 :: ["A"(0)] -(0)-> "A"(2) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(0) x "A"(0)] -(0)-> "A"(2) dequeue#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(8) dequeue#2 :: ["A"(0)] -(0)-> "A"(13) enqueue :: ["A"(0) x "A"(0)] -(0)-> "A"(8) enqueue#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(9) leaf :: [] -(0)-> "A"(0) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(12) x "A"(0)] -(0)-> "A"(12) matrixMult#1 :: ["A"(12) x "A"(0)] -(0)-> "A"(12) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(12) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) node :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) reverse :: ["A"(0)] -(0)-> "A"(0) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(12) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(8) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(14) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(13) appendreverse# :: ["A"(0) x "A"(0)] -(1)-> "A"(13) appendreverse#1# :: ["A"(0) x "A"(0)] -(1)-> "A"(12) bftMult'# :: ["A"(0) x "A"(12)] -(4)-> "A"(1) bftMult'#1# :: ["A"(0) x "A"(12)] -(4)-> "A"(1) bftMult'#2# :: ["A"(0)] -(4)-> "A"(9) bftMult'#3# :: ["A"(0) x "A"(12) x "A"(0)] -(4)-> "A"(1) bftMult'#4# :: ["A"(0) x "A"(12) x "A"(0)] -(4)-> "A"(1) bftMult'#5# :: ["A"(1) x "A"(12) x "A"(0)] -(4)-> "A"(1) dequeue# :: ["A"(0) x "A"(0)] -(4)-> "A"(12) dequeue#1# :: ["A"(0) x "A"(0)] -(4)-> "A"(10) matrixMult# :: ["A"(1) x "A"(0)] -(2)-> "A"(1) matrixMult#1# :: ["A"(1) x "A"(0)] -(1)-> "A"(12) reverse# :: ["A"(0)] -(4)-> "A"(8) c_3 :: ["A"(0)] -(0)-> "A"(15) c_4 :: ["A"(0)] -(0)-> "A"(15) c_9 :: ["A"(0)] -(0)-> "A"(12) c_20 :: ["A"(0)] -(0)-> "A"(15) c_22 :: ["A"(0)] -(0)-> "A"(14) c_32 :: ["A"(9)] -(0)-> "A"(9) c_33 :: ["A"(0)] -(0)-> "A"(15) c_35 :: ["A"(11)] -(0)-> "A"(11) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(0) x "A"(1)] -(1)-> "A"(1) "c_20_A" :: ["A"(0)] -(0)-> "A"(1) "c_22_A" :: ["A"(0)] -(0)-> "A"(1) "c_32_A" :: ["A"(0)] -(0)-> "A"(1) "c_33_A" :: ["A"(0)] -(0)-> "A"(1) "c_35_A" :: ["A"(0)] -(0)-> "A"(1) "c_3_A" :: ["A"(0)] -(0)-> "A"(1) "c_4_A" :: ["A"(0)] -(0)-> "A"(1) "c_9_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) 2. Weak: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) *** Step 8.b:1.a:4: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(1) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(5) #add :: ["A"(1) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(9) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(1) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(15) #neg :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(1) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(10) #pos :: ["A"(0)] -(0)-> "A"(11) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(6) #pred :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(3) #s :: ["A"(0)] -(0)-> "A"(4) #succ :: ["A"(0)] -(0)-> "A"(2) * :: ["A"(0) x "A"(0)] -(0)-> "A"(9) + :: ["A"(9) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(1)] -(1)-> "A"(1) :: :: ["A"(0) x "A"(2)] -(2)-> "A"(2) appendreverse :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) bftMult'#2 :: ["A"(0)] -(0)-> "A"(2) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(0) x "A"(0)] -(0)-> "A"(2) dequeue#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(8) dequeue#2 :: ["A"(0)] -(0)-> "A"(8) enqueue :: ["A"(0) x "A"(0)] -(0)-> "A"(12) enqueue#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(12) leaf :: [] -(0)-> "A"(0) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(2) x "A"(0)] -(0)-> "A"(2) matrixMult#1 :: ["A"(2) x "A"(0)] -(0)-> "A"(2) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(2) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) node :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) reverse :: ["A"(0)] -(0)-> "A"(0) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(12) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(8) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(11) tuple#2 :: ["A"(0) x "A"(0)] -(0)-> "A"(7) appendreverse# :: ["A"(0) x "A"(0)] -(0)-> "A"(8) appendreverse#1# :: ["A"(0) x "A"(0)] -(0)-> "A"(12) bftMult'# :: ["A"(0) x "A"(2)] -(0)-> "A"(13) bftMult'#1# :: ["A"(0) x "A"(2)] -(0)-> "A"(13) bftMult'#2# :: ["A"(0)] -(0)-> "A"(13) bftMult'#3# :: ["A"(0) x "A"(2) x "A"(0)] -(0)-> "A"(13) bftMult'#4# :: ["A"(0) x "A"(2) x "A"(0)] -(0)-> "A"(13) bftMult'#5# :: ["A"(4) x "A"(2) x "A"(0)] -(0)-> "A"(13) dequeue# :: ["A"(0) x "A"(0)] -(0)-> "A"(15) dequeue#1# :: ["A"(0) x "A"(0)] -(0)-> "A"(13) matrixMult# :: ["A"(1) x "A"(0)] -(0)-> "A"(13) matrixMult#1# :: ["A"(1) x "A"(0)] -(0)-> "A"(1) reverse# :: ["A"(0)] -(0)-> "A"(9) c_3 :: ["A"(0)] -(0)-> "A"(12) c_4 :: ["A"(0)] -(0)-> "A"(13) c_9 :: ["A"(15)] -(0)-> "A"(15) c_20 :: ["A"(0)] -(0)-> "A"(15) c_22 :: ["A"(0)] -(0)-> "A"(15) c_32 :: ["A"(0)] -(0)-> "A"(14) c_33 :: ["A"(0)] -(0)-> "A"(12) c_35 :: ["A"(0)] -(0)-> "A"(14) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(0) x "A"(1)] -(1)-> "A"(1) "c_20_A" :: ["A"(0)] -(0)-> "A"(1) "c_22_A" :: ["A"(0)] -(0)-> "A"(1) "c_32_A" :: ["A"(0)] -(0)-> "A"(1) "c_33_A" :: ["A"(0)] -(0)-> "A"(1) "c_35_A" :: ["A"(0)] -(0)-> "A"(1) "c_3_A" :: ["A"(0)] -(0)-> "A"(1) "c_4_A" :: ["A"(0)] -(0)-> "A"(1) "c_9_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(1) "tuple#2_A" :: ["A"(0) x "A"(0)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) 2. Weak: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) *** Step 8.b:1.a:5: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(2) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(13) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #add :: ["A"(2) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(6) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(2) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(14) #neg :: ["A"(0)] -(0)-> "A"(6) #neg :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(2) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(11) #pos :: ["A"(0)] -(0)-> "A"(7) #pos :: ["A"(0)] -(0)-> "A"(10) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(14) #pred :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(4) #s :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(2) #s :: ["A"(0)] -(0)-> "A"(11) #s :: ["A"(0)] -(0)-> "A"(8) #s :: ["A"(0)] -(0)-> "A"(10) #succ :: ["A"(0)] -(0)-> "A"(8) * :: ["A"(0) x "A"(0)] -(0)-> "A"(5) + :: ["A"(3) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(2) x "A"(2)] -(2)-> "A"(2) :: :: ["A"(7) x "A"(7)] -(7)-> "A"(7) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse :: ["A"(7) x "A"(7)] -(0)-> "A"(7) appendreverse#1 :: ["A"(7) x "A"(7)] -(0)-> "A"(7) bftMult'#2 :: ["A"(7)] -(0)-> "A"(7) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(7) x "A"(7)] -(0)-> "A"(7) dequeue#1 :: ["A"(7) x "A"(7)] -(0)-> "A"(7) dequeue#2 :: ["A"(7)] -(0)-> "A"(7) enqueue :: ["A"(7) x "A"(7)] -(7)-> "A"(7) enqueue#1 :: ["A"(7) x "A"(7)] -(7)-> "A"(7) leaf :: [] -(0)-> "A"(7) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(1)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(1)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) nil :: [] -(0)-> "A"(13) node :: ["A"(7) x "A"(7) x "A"(7)] -(7)-> "A"(7) reverse :: ["A"(7)] -(0)-> "A"(7) tuple#2 :: ["A"(7) x "A"(7)] -(0)-> "A"(7) tuple#2 :: ["A"(2) x "A"(2)] -(0)-> "A"(2) tuple#2 :: ["A"(8) x "A"(8)] -(0)-> "A"(8) tuple#2 :: ["A"(14) x "A"(14)] -(0)-> "A"(14) appendreverse# :: ["A"(2) x "A"(0)] -(0)-> "A"(8) appendreverse#1# :: ["A"(2) x "A"(0)] -(0)-> "A"(12) bftMult'# :: ["A"(7) x "A"(0)] -(0)-> "A"(1) bftMult'#1# :: ["A"(7) x "A"(0)] -(0)-> "A"(1) bftMult'#2# :: ["A"(2)] -(0)-> "A"(1) bftMult'#3# :: ["A"(7) x "A"(0) x "A"(7)] -(0)-> "A"(1) bftMult'#4# :: ["A"(7) x "A"(0) x "A"(7)] -(7)-> "A"(1) bftMult'#5# :: ["A"(7) x "A"(0) x "A"(4)] -(0)-> "A"(1) dequeue# :: ["A"(2) x "A"(2)] -(0)-> "A"(12) dequeue#1# :: ["A"(0) x "A"(2)] -(0)-> "A"(9) matrixMult# :: ["A"(0) x "A"(1)] -(0)-> "A"(12) matrixMult#1# :: ["A"(0) x "A"(1)] -(0)-> "A"(9) reverse# :: ["A"(2)] -(0)-> "A"(12) c_3 :: ["A"(0)] -(0)-> "A"(12) c_4 :: ["A"(0)] -(0)-> "A"(14) c_9 :: ["A"(1)] -(0)-> "A"(1) c_20 :: ["A"(0)] -(0)-> "A"(15) c_22 :: ["A"(0)] -(0)-> "A"(11) c_32 :: ["A"(0)] -(0)-> "A"(15) c_33 :: ["A"(0)] -(0)-> "A"(14) c_35 :: ["A"(0)] -(0)-> "A"(15) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_20_A" :: ["A"(0)] -(0)-> "A"(1) "c_22_A" :: ["A"(0)] -(0)-> "A"(1) "c_32_A" :: ["A"(0)] -(0)-> "A"(1) "c_33_A" :: ["A"(0)] -(0)-> "A"(1) "c_35_A" :: ["A"(0)] -(0)-> "A"(1) "c_3_A" :: ["A"(0)] -(0)-> "A"(1) "c_4_A" :: ["A"(0)] -(0)-> "A"(1) "c_9_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) 2. Weak: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) *** Step 8.b:1.a:6: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) - Weak DPs: appendreverse#1#(::(@a,@as),@sofar) -> c_4(appendreverse#(@as,::(@a,@sofar))) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> c_9(dequeue#(@dequeue@1,@dequeue@2)) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> c_20(dequeue#1#(@outq,@inq)) dequeue#1#(nil(),@inq) -> c_22(reverse#(@inq)) matrixMult#(@m1,@m2) -> c_32(matrixMult#1#(@m1,@m2)) matrixMult#1#(::(@l,@ls),@m2) -> c_33(matrixMult#(@ls,@m2)) reverse#(@xs) -> c_35(appendreverse#(@xs,nil())) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/1,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(1) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(13) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #add :: ["A"(1) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(6) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(1) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(6) #neg :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(1) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(11) #pos :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(6) #pos :: ["A"(0)] -(0)-> "A"(13) #pred :: ["A"(0)] -(0)-> "A"(7) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(10) #s :: ["A"(0)] -(0)-> "A"(8) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(6) #s :: ["A"(0)] -(0)-> "A"(4) #s :: ["A"(0)] -(0)-> "A"(11) #s :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(13) #s :: ["A"(0)] -(0)-> "A"(14) #succ :: ["A"(0)] -(0)-> "A"(9) * :: ["A"(0) x "A"(0)] -(0)-> "A"(2) + :: ["A"(1) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(1) x "A"(1)] -(1)-> "A"(1) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse :: ["A"(1) x "A"(1)] -(0)-> "A"(1) appendreverse#1 :: ["A"(1) x "A"(1)] -(0)-> "A"(1) bftMult'#2 :: ["A"(1)] -(0)-> "A"(1) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(1) x "A"(1)] -(0)-> "A"(1) dequeue#1 :: ["A"(1) x "A"(1)] -(0)-> "A"(1) dequeue#2 :: ["A"(1)] -(0)-> "A"(1) enqueue :: ["A"(1) x "A"(1)] -(1)-> "A"(1) enqueue#1 :: ["A"(1) x "A"(1)] -(1)-> "A"(1) leaf :: [] -(0)-> "A"(1) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(1) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) node :: ["A"(0) x "A"(1) x "A"(1)] -(1)-> "A"(1) reverse :: ["A"(1)] -(0)-> "A"(1) tuple#2 :: ["A"(1) x "A"(1)] -(0)-> "A"(1) tuple#2 :: ["A"(9) x "A"(9)] -(0)-> "A"(9) appendreverse# :: ["A"(1) x "A"(0)] -(1)-> "A"(0) appendreverse#1# :: ["A"(1) x "A"(0)] -(0)-> "A"(12) bftMult'# :: ["A"(1) x "A"(0)] -(6)-> "A"(15) bftMult'#1# :: ["A"(1) x "A"(0)] -(6)-> "A"(15) bftMult'#2# :: ["A"(1)] -(5)-> "A"(15) bftMult'#3# :: ["A"(1) x "A"(0) x "A"(1)] -(6)-> "A"(15) bftMult'#4# :: ["A"(1) x "A"(0) x "A"(1)] -(7)-> "A"(15) bftMult'#5# :: ["A"(1) x "A"(0) x "A"(0)] -(6)-> "A"(15) dequeue# :: ["A"(1) x "A"(1)] -(5)-> "A"(4) dequeue#1# :: ["A"(0) x "A"(1)] -(5)-> "A"(12) matrixMult# :: ["A"(0) x "A"(0)] -(4)-> "A"(15) matrixMult#1# :: ["A"(0) x "A"(0)] -(4)-> "A"(1) reverse# :: ["A"(1)] -(1)-> "A"(12) c_3 :: ["A"(2)] -(0)-> "A"(2) c_4 :: ["A"(0)] -(0)-> "A"(15) c_9 :: ["A"(0)] -(0)-> "A"(15) c_20 :: ["A"(0)] -(0)-> "A"(7) c_22 :: ["A"(0)] -(0)-> "A"(15) c_32 :: ["A"(0)] -(0)-> "A"(15) c_33 :: ["A"(0)] -(0)-> "A"(3) c_35 :: ["A"(0)] -(0)-> "A"(15) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_20_A" :: ["A"(0)] -(0)-> "A"(1) "c_22_A" :: ["A"(0)] -(0)-> "A"(1) "c_32_A" :: ["A"(0)] -(0)-> "A"(1) "c_33_A" :: ["A"(0)] -(0)-> "A"(1) "c_35_A" :: ["A"(0)] -(0)-> "A"(1) "c_3_A" :: ["A"(0)] -(0)-> "A"(1) "c_4_A" :: ["A"(0)] -(0)-> "A"(1) "c_9_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(0) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: appendreverse#(@toreverse,@sofar) -> c_3(appendreverse#1#(@toreverse,@sofar)) 2. Weak: *** Step 8.b:1.b:1: DecomposeDG WORST_CASE(?,O(n^2)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: DecomposeDG {onSelection = all below first cut in WDG, onUpper = Nothing, onLower = Nothing} + Details: We decompose the input problem according to the dependency graph into the upper component appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) and a lower component lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) Further, following extension rules are added to the lower component. appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) **** Step 8.b:1.b:1.a:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) - Weak DPs: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):2 2:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):3 3:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 4:W:appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)):5 5:W:appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):4 6:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):8 7:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) -->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2):9 8:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):10 9:W:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) -->_1 dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq):15 10:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):12 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):11 11:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):7 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 12:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):14 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):13 13:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):7 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 14:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 15:W:dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) -->_1 dequeue#1#(nil(),@inq) -> reverse#(@inq):16 16:W:dequeue#1#(nil(),@inq) -> reverse#(@inq) -->_1 reverse#(@xs) -> appendreverse#(@xs,nil()):20 17:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):19 -->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):18 18:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 19:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 20:W:reverse#(@xs) -> appendreverse#(@xs,nil()) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):4 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 7: bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) 9: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) 15: dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) 16: dequeue#1#(nil(),@inq) -> reverse#(@inq) 20: reverse#(@xs) -> appendreverse#(@xs,nil()) 4: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) 5: appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) **** Step 8.b:1.b:1.a:2: SimplifyRHS WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: SimplifyRHS + Details: Consider the dependency graph 1:S:computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)):2 2:S:computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)):3 3:S:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) ,lineMult#(@x,@l,@acc)) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 6:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):8 8:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):10 10:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):12 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):11 11:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 12:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):14 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):13 13:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):6 14:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 17:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):19 -->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):18 18:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) -->_1 computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)):1 19:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):17 Due to missing edges in the depndency graph, the right-hand sides of following rules could be simplified: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) **** Step 8.b:1.b:1.a:3: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(2) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(13) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(5) #add :: ["A"(2) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(6) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(2) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(10) #neg :: ["A"(0)] -(0)-> "A"(8) #neg :: ["A"(0)] -(0)-> "A"(11) #pos :: ["A"(0)] -(0)-> "A"(2) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(10) #pos :: ["A"(0)] -(0)-> "A"(8) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(11) #pred :: ["A"(0)] -(0)-> "A"(3) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(6) #s :: ["A"(0)] -(0)-> "A"(11) #s :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(13) #succ :: ["A"(0)] -(0)-> "A"(1) * :: ["A"(0) x "A"(0)] -(0)-> "A"(4) + :: ["A"(2) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(1) x "A"(1)] -(1)-> "A"(1) :: :: ["A"(4) x "A"(4)] -(4)-> "A"(4) appendreverse :: ["A"(4) x "A"(4)] -(0)-> "A"(4) appendreverse#1 :: ["A"(4) x "A"(4)] -(0)-> "A"(4) bftMult'#2 :: ["A"(4)] -(4)-> "A"(4) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(4) x "A"(4)] -(8)-> "A"(4) dequeue#1 :: ["A"(4) x "A"(4)] -(8)-> "A"(4) dequeue#2 :: ["A"(4)] -(8)-> "A"(4) enqueue :: ["A"(4) x "A"(4)] -(4)-> "A"(4) enqueue#1 :: ["A"(4) x "A"(4)] -(4)-> "A"(4) leaf :: [] -(0)-> "A"(4) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(1)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(1)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(4) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) nil :: [] -(0)-> "A"(13) node :: ["A"(4) x "A"(4) x "A"(4)] -(4)-> "A"(4) reverse :: ["A"(4)] -(0)-> "A"(4) tuple#2 :: ["A"(4) x "A"(4)] -(4)-> "A"(4) bftMult'# :: ["A"(4) x "A"(0)] -(7)-> "A"(5) bftMult'#1# :: ["A"(4) x "A"(0)] -(3)-> "A"(5) bftMult'#3# :: ["A"(4) x "A"(0) x "A"(4)] -(7)-> "A"(5) bftMult'#4# :: ["A"(4) x "A"(0) x "A"(4)] -(11)-> "A"(5) bftMult'#5# :: ["A"(4) x "A"(0) x "A"(2)] -(7)-> "A"(5) computeLine# :: ["A"(0) x "A"(1) x "A"(0)] -(1)-> "A"(8) computeLine#1# :: ["A"(0) x "A"(0) x "A"(1)] -(1)-> "A"(12) computeLine#2# :: ["A"(1) x "A"(0) x "A"(0) x "A"(0)] -(1)-> "A"(12) matrixMult# :: ["A"(0) x "A"(2)] -(5)-> "A"(6) matrixMult#1# :: ["A"(0) x "A"(2)] -(5)-> "A"(6) c_15 :: ["A"(0)] -(0)-> "A"(12) c_16 :: ["A"(0)] -(0)-> "A"(15) c_18 :: ["A"(0)] -(0)-> "A"(15) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_15_A" :: ["A"(0)] -(0)-> "A"(1) "c_16_A" :: ["A"(0)] -(0)-> "A"(1) "c_18_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) 2. Weak: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) **** Step 8.b:1.b:1.a:4: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(1) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(13) #add :: ["A"(1) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(1) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(1) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(8) #neg :: ["A"(0)] -(0)-> "A"(10) #neg :: ["A"(0)] -(0)-> "A"(12) #neg :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(1) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(13) #pos :: ["A"(0)] -(0)-> "A"(8) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(15) #pred :: ["A"(0)] -(0)-> "A"(6) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(8) #s :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(11) #s :: ["A"(0)] -(0)-> "A"(6) #s :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(9) #s :: ["A"(0)] -(0)-> "A"(10) #succ :: ["A"(0)] -(0)-> "A"(1) * :: ["A"(0) x "A"(0)] -(0)-> "A"(1) + :: ["A"(1) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(7) x "A"(7)] -(7)-> "A"(7) appendreverse :: ["A"(7) x "A"(7)] -(0)-> "A"(7) appendreverse#1 :: ["A"(7) x "A"(7)] -(0)-> "A"(7) bftMult'#2 :: ["A"(7)] -(0)-> "A"(7) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(7) x "A"(7)] -(0)-> "A"(7) dequeue#1 :: ["A"(7) x "A"(7)] -(0)-> "A"(7) dequeue#2 :: ["A"(7)] -(0)-> "A"(7) enqueue :: ["A"(7) x "A"(7)] -(7)-> "A"(7) enqueue#1 :: ["A"(7) x "A"(7)] -(7)-> "A"(7) leaf :: [] -(0)-> "A"(7) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(4)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(4)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) nil :: [] -(0)-> "A"(13) node :: ["A"(7) x "A"(7) x "A"(7)] -(7)-> "A"(7) reverse :: ["A"(7)] -(0)-> "A"(7) tuple#2 :: ["A"(7) x "A"(7)] -(0)-> "A"(7) tuple#2 :: ["A"(10) x "A"(10)] -(0)-> "A"(10) bftMult'# :: ["A"(7) x "A"(0)] -(8)-> "A"(5) bftMult'#1# :: ["A"(7) x "A"(0)] -(8)-> "A"(5) bftMult'#3# :: ["A"(7) x "A"(0) x "A"(7)] -(8)-> "A"(5) bftMult'#4# :: ["A"(7) x "A"(0) x "A"(7)] -(15)-> "A"(5) bftMult'#5# :: ["A"(7) x "A"(0) x "A"(7)] -(8)-> "A"(5) computeLine# :: ["A"(0) x "A"(7) x "A"(0)] -(8)-> "A"(12) computeLine#1# :: ["A"(0) x "A"(0) x "A"(7)] -(7)-> "A"(12) computeLine#2# :: ["A"(7) x "A"(0) x "A"(0) x "A"(0)] -(3)-> "A"(1) matrixMult# :: ["A"(0) x "A"(7)] -(8)-> "A"(10) matrixMult#1# :: ["A"(0) x "A"(7)] -(8)-> "A"(10) c_15 :: ["A"(0)] -(0)-> "A"(14) c_16 :: ["A"(0)] -(0)-> "A"(15) c_18 :: ["A"(0)] -(0)-> "A"(11) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_15_A" :: ["A"(0)] -(0)-> "A"(1) "c_16_A" :: ["A"(0)] -(0)-> "A"(1) "c_18_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) 2. Weak: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) **** Step 8.b:1.b:1.a:5: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#1#(::(@x,@xs),@acc,@m) -> c_16(computeLine#2#(@m,@acc,@x,@xs)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> c_18(computeLine#(@xs,@ls,lineMult(@x,@l,@acc))) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/1,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(1) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(5) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #add :: ["A"(1) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(3) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(1) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(13) #neg :: ["A"(0)] -(0)-> "A"(8) #neg :: ["A"(0)] -(0)-> "A"(15) #neg :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(1) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(8) #pos :: ["A"(0)] -(0)-> "A"(9) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(15) #pred :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(8) #s :: ["A"(0)] -(0)-> "A"(2) #s :: ["A"(0)] -(0)-> "A"(1) #succ :: ["A"(0)] -(0)-> "A"(14) * :: ["A"(0) x "A"(0)] -(0)-> "A"(3) + :: ["A"(3) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(2) x "A"(2)] -(2)-> "A"(2) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse :: ["A"(2) x "A"(2)] -(0)-> "A"(2) appendreverse#1 :: ["A"(2) x "A"(2)] -(0)-> "A"(2) bftMult'#2 :: ["A"(2)] -(2)-> "A"(2) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(2) x "A"(2)] -(4)-> "A"(2) dequeue#1 :: ["A"(2) x "A"(2)] -(4)-> "A"(2) dequeue#2 :: ["A"(2)] -(4)-> "A"(2) enqueue :: ["A"(2) x "A"(2)] -(2)-> "A"(2) enqueue#1 :: ["A"(2) x "A"(2)] -(2)-> "A"(2) leaf :: [] -(0)-> "A"(2) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(2) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) nil :: [] -(0)-> "A"(11) node :: ["A"(2) x "A"(2) x "A"(2)] -(2)-> "A"(2) reverse :: ["A"(2)] -(0)-> "A"(2) tuple#2 :: ["A"(2) x "A"(2)] -(2)-> "A"(2) bftMult'# :: ["A"(2) x "A"(0)] -(8)-> "A"(1) bftMult'#1# :: ["A"(2) x "A"(0)] -(6)-> "A"(1) bftMult'#3# :: ["A"(2) x "A"(0) x "A"(2)] -(8)-> "A"(1) bftMult'#4# :: ["A"(2) x "A"(0) x "A"(2)] -(10)-> "A"(1) bftMult'#5# :: ["A"(2) x "A"(0) x "A"(2)] -(8)-> "A"(1) computeLine# :: ["A"(0) x "A"(2) x "A"(0)] -(2)-> "A"(1) computeLine#1# :: ["A"(0) x "A"(0) x "A"(2)] -(1)-> "A"(15) computeLine#2# :: ["A"(2) x "A"(0) x "A"(0) x "A"(0)] -(1)-> "A"(12) matrixMult# :: ["A"(0) x "A"(2)] -(6)-> "A"(1) matrixMult#1# :: ["A"(0) x "A"(2)] -(6)-> "A"(1) c_15 :: ["A"(7)] -(0)-> "A"(7) c_16 :: ["A"(0)] -(0)-> "A"(15) c_18 :: ["A"(0)] -(0)-> "A"(15) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_15_A" :: ["A"(0)] -(0)-> "A"(1) "c_16_A" :: ["A"(0)] -(0)-> "A"(1) "c_18_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: computeLine#(@line,@m,@acc) -> c_15(computeLine#1#(@line,@acc,@m)) 2. Weak: **** Step 8.b:1.b:1.b:1: RemoveWeakSuffixes WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) dequeue#1#(nil(),@inq) -> reverse#(@inq) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) reverse#(@xs) -> appendreverse#(@xs,nil()) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: RemoveWeakSuffixes + Details: Consider the dependency graph 1:S:lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) -->_1 lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)):2 2:S:lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) -->_1 lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())):4 -->_1 lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)):3 3:S:lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):1 4:S:lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):1 5:W:appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) -->_1 appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)):6 6:W:appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):5 7:W:bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) -->_1 bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue):9 8:W:bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) -->_1 bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2):10 9:W:bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) -->_1 bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue):11 10:W:bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) -->_1 dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq):20 11:W:bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) -->_1 bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)) ,@acc ,@y):13 -->_1 bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc):12 12:W:bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):8 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):7 13:W:bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) -->_1 bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y):15 -->_1 bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)):14 14:W:bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) -->_1 bftMult'#(@queue,@acc) -> bftMult'#2#(@queue):8 -->_1 bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc):7 15:W:bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):22 16:W:computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) -->_1 computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs):17 17:W:computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc):19 -->_1 computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)):18 18:W:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) -->_1 computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m):16 19:W:computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) -->_1 lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)):1 20:W:dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) -->_1 dequeue#1#(nil(),@inq) -> reverse#(@inq):21 21:W:dequeue#1#(nil(),@inq) -> reverse#(@inq) -->_1 reverse#(@xs) -> appendreverse#(@xs,nil()):25 22:W:matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) -->_1 matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2):24 -->_1 matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()):23 23:W:matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) -->_1 computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m):16 24:W:matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) -->_1 matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2):22 25:W:reverse#(@xs) -> appendreverse#(@xs,nil()) -->_1 appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar):5 The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. 8: bftMult'#(@queue,@acc) -> bftMult'#2#(@queue) 10: bftMult'#2#(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue#(@dequeue@1,@dequeue@2) 20: dequeue#(@outq,@inq) -> dequeue#1#(@outq,@inq) 21: dequeue#1#(nil(),@inq) -> reverse#(@inq) 25: reverse#(@xs) -> appendreverse#(@xs,nil()) 5: appendreverse#(@toreverse,@sofar) -> appendreverse#1#(@toreverse,@sofar) 6: appendreverse#1#(::(@a,@as),@sofar) -> appendreverse#(@as,::(@a,@sofar)) **** Step 8.b:1.b:1.b:2: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(1) #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(13) #add :: ["A"(1) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(1) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(1) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(3) #neg :: ["A"(0)] -(0)-> "A"(15) #neg :: ["A"(0)] -(0)-> "A"(11) #pos :: ["A"(0)] -(0)-> "A"(1) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(13) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(7) #pos :: ["A"(0)] -(0)-> "A"(10) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(15) #pred :: ["A"(0)] -(0)-> "A"(9) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(1) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(7) #s :: ["A"(0)] -(0)-> "A"(5) #s :: ["A"(0)] -(0)-> "A"(11) #succ :: ["A"(0)] -(0)-> "A"(6) * :: ["A"(0) x "A"(0)] -(0)-> "A"(1) + :: ["A"(1) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(3) x "A"(3)] -(3)-> "A"(3) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(4) x "A"(4)] -(4)-> "A"(4) appendreverse :: ["A"(4) x "A"(4)] -(0)-> "A"(4) appendreverse#1 :: ["A"(4) x "A"(4)] -(0)-> "A"(4) bftMult'#2 :: ["A"(4)] -(0)-> "A"(4) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(4) x "A"(4)] -(0)-> "A"(4) dequeue#1 :: ["A"(4) x "A"(4)] -(0)-> "A"(4) dequeue#2 :: ["A"(4)] -(0)-> "A"(4) enqueue :: ["A"(4) x "A"(4)] -(4)-> "A"(4) enqueue#1 :: ["A"(4) x "A"(4)] -(4)-> "A"(4) leaf :: [] -(0)-> "A"(4) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(4) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(11) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) nil :: [] -(0)-> "A"(13) node :: ["A"(4) x "A"(4) x "A"(4)] -(4)-> "A"(4) reverse :: ["A"(4)] -(0)-> "A"(4) tuple#2 :: ["A"(4) x "A"(4)] -(0)-> "A"(4) tuple#2 :: ["A"(12) x "A"(12)] -(0)-> "A"(12) bftMult'# :: ["A"(4) x "A"(0)] -(2)-> "A"(1) bftMult'#1# :: ["A"(4) x "A"(0)] -(2)-> "A"(1) bftMult'#3# :: ["A"(4) x "A"(0) x "A"(4)] -(2)-> "A"(1) bftMult'#4# :: ["A"(4) x "A"(0) x "A"(4)] -(6)-> "A"(1) bftMult'#5# :: ["A"(4) x "A"(0) x "A"(4)] -(2)-> "A"(1) computeLine# :: ["A"(0) x "A"(4) x "A"(0)] -(1)-> "A"(1) computeLine#1# :: ["A"(0) x "A"(0) x "A"(4)] -(1)-> "A"(1) computeLine#2# :: ["A"(4) x "A"(0) x "A"(0) x "A"(0)] -(1)-> "A"(1) lineMult# :: ["A"(0) x "A"(3) x "A"(0)] -(0)-> "A"(1) lineMult#1# :: ["A"(3) x "A"(0) x "A"(0)] -(0)-> "A"(12) lineMult#2# :: ["A"(0) x "A"(0) x "A"(1) x "A"(3)] -(3)-> "A"(12) matrixMult# :: ["A"(0) x "A"(4)] -(2)-> "A"(1) matrixMult#1# :: ["A"(0) x "A"(4)] -(2)-> "A"(1) c_27 :: ["A"(0)] -(0)-> "A"(12) c_28 :: ["A"(0)] -(0)-> "A"(15) c_30 :: ["A"(0)] -(0)-> "A"(15) c_31 :: ["A"(0)] -(0)-> "A"(15) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_27_A" :: ["A"(0)] -(0)-> "A"(1) "c_28_A" :: ["A"(0)] -(0)-> "A"(1) "c_30_A" :: ["A"(0)] -(0)-> "A"(1) "c_31_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) 2. Weak: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) **** Step 8.b:1.b:1.b:3: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(13) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #0 :: [] -(0)-> "A"(11) #add :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(10) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(14) #neg :: ["A"(0)] -(0)-> "A"(12) #neg :: ["A"(0)] -(0)-> "A"(7) #pos :: ["A"(0)] -(0)-> "A"(0) #pos :: ["A"(0)] -(0)-> "A"(13) #pos :: ["A"(0)] -(0)-> "A"(9) #pos :: ["A"(0)] -(0)-> "A"(12) #pos :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(8) #pos :: ["A"(0)] -(0)-> "A"(15) #pos :: ["A"(0)] -(0)-> "A"(7) #pred :: ["A"(0)] -(0)-> "A"(9) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(4) #s :: ["A"(0)] -(0)-> "A"(8) #s :: ["A"(0)] -(0)-> "A"(14) #s :: ["A"(0)] -(0)-> "A"(12) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(5) #succ :: ["A"(0)] -(0)-> "A"(4) * :: ["A"(0) x "A"(0)] -(0)-> "A"(9) + :: ["A"(1) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(1) x "A"(1)] -(1)-> "A"(1) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) appendreverse :: ["A"(1) x "A"(1)] -(0)-> "A"(1) appendreverse#1 :: ["A"(1) x "A"(1)] -(0)-> "A"(1) bftMult'#2 :: ["A"(1)] -(0)-> "A"(1) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(1) x "A"(1)] -(0)-> "A"(1) dequeue#1 :: ["A"(1) x "A"(1)] -(0)-> "A"(1) dequeue#2 :: ["A"(1)] -(0)-> "A"(1) enqueue :: ["A"(1) x "A"(1)] -(1)-> "A"(1) enqueue#1 :: ["A"(1) x "A"(1)] -(1)-> "A"(1) leaf :: [] -(0)-> "A"(1) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(1) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(5) node :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) reverse :: ["A"(1)] -(0)-> "A"(1) tuple#2 :: ["A"(1) x "A"(1)] -(0)-> "A"(1) tuple#2 :: ["A"(9) x "A"(9)] -(0)-> "A"(9) tuple#2 :: ["A"(14) x "A"(14)] -(0)-> "A"(14) bftMult'# :: ["A"(1) x "A"(0)] -(8)-> "A"(5) bftMult'#1# :: ["A"(1) x "A"(0)] -(8)-> "A"(5) bftMult'#3# :: ["A"(1) x "A"(0) x "A"(1)] -(8)-> "A"(5) bftMult'#4# :: ["A"(1) x "A"(0) x "A"(1)] -(9)-> "A"(5) bftMult'#5# :: ["A"(1) x "A"(0) x "A"(1)] -(8)-> "A"(5) computeLine# :: ["A"(0) x "A"(1) x "A"(0)] -(7)-> "A"(6) computeLine#1# :: ["A"(0) x "A"(0) x "A"(1)] -(7)-> "A"(6) computeLine#2# :: ["A"(1) x "A"(0) x "A"(0) x "A"(0)] -(7)-> "A"(6) lineMult# :: ["A"(0) x "A"(1) x "A"(0)] -(0)-> "A"(9) lineMult#1# :: ["A"(1) x "A"(0) x "A"(0)] -(0)-> "A"(9) lineMult#2# :: ["A"(0) x "A"(0) x "A"(1) x "A"(1)] -(0)-> "A"(5) matrixMult# :: ["A"(0) x "A"(1)] -(8)-> "A"(6) matrixMult#1# :: ["A"(0) x "A"(1)] -(8)-> "A"(6) c_27 :: ["A"(0)] -(0)-> "A"(15) c_28 :: ["A"(0)] -(0)-> "A"(9) c_30 :: ["A"(5)] -(0)-> "A"(5) c_31 :: ["A"(5)] -(0)-> "A"(5) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(0)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_27_A" :: ["A"(0)] -(0)-> "A"(1) "c_28_A" :: ["A"(0)] -(0)-> "A"(1) "c_30_A" :: ["A"(0)] -(0)-> "A"(1) "c_31_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(0)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) 2. Weak: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) **** Step 8.b:1.b:1.b:4: Ara WORST_CASE(?,O(n^1)) + Considered Problem: - Strict DPs: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) - Weak DPs: bftMult'#(@queue,@acc) -> bftMult'#1#(bftMult'#2(@queue),@acc) bftMult'#1#(tuple#2(@elem,@queue),@acc) -> bftMult'#3#(@elem,@acc,@queue) bftMult'#3#(::(@t,@_@3),@acc,@queue) -> bftMult'#4#(@t,@acc,@queue) bftMult'#4#(leaf(),@acc,@queue) -> bftMult'#(@queue,@acc) bftMult'#4#(node(@y,@t1,@t2),@acc,@queue) -> bftMult'#5#(enqueue(@t2,enqueue(@t1,@queue)),@acc,@y) bftMult'#5#(@queue',@acc,@y) -> bftMult'#(@queue',matrixMult(@acc,@y)) bftMult'#5#(@queue',@acc,@y) -> matrixMult#(@acc,@y) computeLine#(@line,@m,@acc) -> computeLine#1#(@line,@acc,@m) computeLine#1#(::(@x,@xs),@acc,@m) -> computeLine#2#(@m,@acc,@x,@xs) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> computeLine#(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2#(::(@l,@ls),@acc,@x,@xs) -> lineMult#(@x,@l,@acc) lineMult#1#(::(@x,@xs),@l2,@n) -> c_28(lineMult#2#(@l2,@n,@x,@xs)) lineMult#2#(::(@y,@ys),@n,@x,@xs) -> c_30(lineMult#(@n,@xs,@ys)) lineMult#2#(nil(),@n,@x,@xs) -> c_31(lineMult#(@n,@xs,nil())) matrixMult#(@m1,@m2) -> matrixMult#1#(@m1,@m2) matrixMult#1#(::(@l,@ls),@m2) -> computeLine#(@l,@m2,nil()) matrixMult#1#(::(@l,@ls),@m2) -> matrixMult#(@ls,@m2) - Weak TRS: #add(#0(),@y) -> @y #add(#neg(#s(#0())),@y) -> #pred(@y) #add(#neg(#s(#s(@x))),@y) -> #pred(#add(#pos(#s(@x)),@y)) #add(#pos(#s(#0())),@y) -> #succ(@y) #add(#pos(#s(#s(@x))),@y) -> #succ(#add(#pos(#s(@x)),@y)) #mult(#0(),#0()) -> #0() #mult(#0(),#neg(@y)) -> #0() #mult(#0(),#pos(@y)) -> #0() #mult(#neg(@x),#0()) -> #0() #mult(#neg(@x),#neg(@y)) -> #pos(#natmult(@x,@y)) #mult(#neg(@x),#pos(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#0()) -> #0() #mult(#pos(@x),#neg(@y)) -> #neg(#natmult(@x,@y)) #mult(#pos(@x),#pos(@y)) -> #pos(#natmult(@x,@y)) #natmult(#0(),@y) -> #0() #natmult(#s(@x),@y) -> #add(#pos(@y),#natmult(@x,@y)) #pred(#0()) -> #neg(#s(#0())) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0()))) -> #0() #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0()) -> #pos(#s(#0())) #succ(#neg(#s(#0()))) -> #0() #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) *(@x,@y) -> #mult(@x,@y) +(@x,@y) -> #add(@x,@y) appendreverse(@toreverse,@sofar) -> appendreverse#1(@toreverse,@sofar) appendreverse#1(::(@a,@as),@sofar) -> appendreverse(@as,::(@a,@sofar)) appendreverse#1(nil(),@sofar) -> @sofar bftMult'#2(tuple#2(@dequeue@1,@dequeue@2)) -> dequeue(@dequeue@1,@dequeue@2) computeLine(@line,@m,@acc) -> computeLine#1(@line,@acc,@m) computeLine#1(::(@x,@xs),@acc,@m) -> computeLine#2(@m,@acc,@x,@xs) computeLine#1(nil(),@acc,@m) -> @acc computeLine#2(::(@l,@ls),@acc,@x,@xs) -> computeLine(@xs,@ls,lineMult(@x,@l,@acc)) computeLine#2(nil(),@acc,@x,@xs) -> nil() dequeue(@outq,@inq) -> dequeue#1(@outq,@inq) dequeue#1(::(@t,@ts),@inq) -> tuple#2(::(@t,nil()),tuple#2(@ts,@inq)) dequeue#1(nil(),@inq) -> dequeue#2(reverse(@inq)) dequeue#2(::(@t,@ts)) -> tuple#2(::(@t,nil()),tuple#2(@ts,nil())) dequeue#2(nil()) -> tuple#2(nil(),tuple#2(nil(),nil())) enqueue(@t,@queue) -> enqueue#1(@queue,@t) enqueue#1(tuple#2(@outq,@inq),@t) -> tuple#2(@outq,::(@t,@inq)) lineMult(@n,@l1,@l2) -> lineMult#1(@l1,@l2,@n) lineMult#1(::(@x,@xs),@l2,@n) -> lineMult#2(@l2,@n,@x,@xs) lineMult#1(nil(),@l2,@n) -> nil() lineMult#2(::(@y,@ys),@n,@x,@xs) -> ::(+(*(@x,@n),@y),lineMult(@n,@xs,@ys)) lineMult#2(nil(),@n,@x,@xs) -> ::(*(@x,@n),lineMult(@n,@xs,nil())) matrixMult(@m1,@m2) -> matrixMult#1(@m1,@m2) matrixMult#1(::(@l,@ls),@m2) -> ::(computeLine(@l,@m2,nil()),matrixMult(@ls,@m2)) matrixMult#1(nil(),@m2) -> nil() reverse(@xs) -> appendreverse(@xs,nil()) - Signature: {#add/2,#mult/2,#natmult/2,#pred/1,#succ/1,*/2,+/2,appendreverse/2,appendreverse#1/2,bftMult/2,bftMult'/2 ,bftMult'#1/2,bftMult'#2/1,bftMult'#3/3,bftMult'#4/3,bftMult'#5/3,computeLine/3,computeLine#1/3 ,computeLine#2/4,dequeue/2,dequeue#1/2,dequeue#2/1,enqueue/2,enqueue#1/2,lineMult/3,lineMult#1/3 ,lineMult#2/4,matrixMult/2,matrixMult#1/2,reverse/1,#add#/2,#mult#/2,#natmult#/2,#pred#/1,#succ#/1,*#/2,+#/2 ,appendreverse#/2,appendreverse#1#/2,bftMult#/2,bftMult'#/2,bftMult'#1#/2,bftMult'#2#/1,bftMult'#3#/3 ,bftMult'#4#/3,bftMult'#5#/3,computeLine#/3,computeLine#1#/3,computeLine#2#/4,dequeue#/2,dequeue#1#/2 ,dequeue#2#/1,enqueue#/2,enqueue#1#/2,lineMult#/3,lineMult#1#/3,lineMult#2#/4,matrixMult#/2,matrixMult#1#/2 ,reverse#/1} / {#0/0,#neg/1,#pos/1,#s/1,::/2,leaf/0,nil/0,node/3,tuple#2/2,c_1/1,c_2/1,c_3/1,c_4/1,c_5/0 ,c_6/1,c_7/2,c_8/1,c_9/1,c_10/1,c_11/0,c_12/1,c_13/1,c_14/2,c_15/1,c_16/1,c_17/0,c_18/2,c_19/0,c_20/1,c_21/0 ,c_22/1,c_23/0,c_24/0,c_25/1,c_26/0,c_27/1,c_28/1,c_29/0,c_30/1,c_31/1,c_32/1,c_33/2,c_34/0,c_35/1,c_36/0 ,c_37/1,c_38/2,c_39/1,c_40/2,c_41/0,c_42/0,c_43/0,c_44/0,c_45/1,c_46/1,c_47/0,c_48/1,c_49/1,c_50/0,c_51/2 ,c_52/0,c_53/0,c_54/0,c_55/0,c_56/0,c_57/0,c_58/0,c_59/0} - Obligation: innermost runtime complexity wrt. defined symbols {#add#,#mult#,#natmult#,#pred#,#succ#,*#,+#,appendreverse# ,appendreverse#1#,bftMult#,bftMult'#,bftMult'#1#,bftMult'#2#,bftMult'#3#,bftMult'#4#,bftMult'#5# ,computeLine#,computeLine#1#,computeLine#2#,dequeue#,dequeue#1#,dequeue#2#,enqueue#,enqueue#1#,lineMult# ,lineMult#1#,lineMult#2#,matrixMult#,matrixMult#1#,reverse#} and constructors {#0,#neg,#pos,#s,::,leaf,nil ,node,tuple#2} + Applied Processor: Ara {araHeuristics = NoHeuristics, minDegree = 1, maxDegree = 2, araTimeout = 8, araRuleShifting = Just 1} + Details: Signatures used: ---------------- #0 :: [] -(0)-> "A"(0) #0 :: [] -(0)-> "A"(7) #0 :: [] -(0)-> "A"(15) #add :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #mult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #natmult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(0) #neg :: ["A"(0)] -(0)-> "A"(4) #neg :: ["A"(0)] -(0)-> "A"(12) #neg :: ["A"(0)] -(0)-> "A"(14) #pos :: ["A"(0)] -(0)-> "A"(0) #pred :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(0) #s :: ["A"(0)] -(0)-> "A"(1) #s :: ["A"(0)] -(0)-> "A"(15) #s :: ["A"(0)] -(0)-> "A"(7) #s :: ["A"(0)] -(0)-> "A"(13) #s :: ["A"(0)] -(0)-> "A"(5) #succ :: ["A"(0)] -(0)-> "A"(0) * :: ["A"(0) x "A"(0)] -(0)-> "A"(0) + :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(5) x "A"(5)] -(5)-> "A"(5) :: :: ["A"(0) x "A"(0)] -(0)-> "A"(0) :: :: ["A"(3) x "A"(3)] -(3)-> "A"(3) :: :: ["A"(1) x "A"(1)] -(1)-> "A"(1) appendreverse :: ["A"(5) x "A"(5)] -(0)-> "A"(5) appendreverse#1 :: ["A"(5) x "A"(5)] -(0)-> "A"(5) bftMult'#2 :: ["A"(5)] -(5)-> "A"(5) computeLine :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) computeLine#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) dequeue :: ["A"(5) x "A"(5)] -(10)-> "A"(5) dequeue#1 :: ["A"(5) x "A"(5)] -(10)-> "A"(5) dequeue#2 :: ["A"(5)] -(10)-> "A"(5) enqueue :: ["A"(5) x "A"(5)] -(5)-> "A"(5) enqueue#1 :: ["A"(5) x "A"(5)] -(5)-> "A"(5) leaf :: [] -(0)-> "A"(5) lineMult :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#1 :: ["A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) lineMult#2 :: ["A"(0) x "A"(0) x "A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult :: ["A"(0) x "A"(0)] -(0)-> "A"(0) matrixMult#1 :: ["A"(0) x "A"(0)] -(0)-> "A"(0) nil :: [] -(0)-> "A"(5) nil :: [] -(0)-> "A"(0) nil :: [] -(0)-> "A"(7) nil :: [] -(0)-> "A"(15) nil :: [] -(0)-> "A"(11) node :: ["A"(5) x "A"(5) x "A"(5)] -(5)-> "A"(5) reverse :: ["A"(5)] -(0)-> "A"(5) tuple#2 :: ["A"(5) x "A"(5)] -(5)-> "A"(5) bftMult'# :: ["A"(5) x "A"(0)] -(6)-> "A"(5) bftMult'#1# :: ["A"(5) x "A"(0)] -(1)-> "A"(5) bftMult'#3# :: ["A"(5) x "A"(0) x "A"(5)] -(6)-> "A"(5) bftMult'#4# :: ["A"(5) x "A"(0) x "A"(5)] -(11)-> "A"(5) bftMult'#5# :: ["A"(5) x "A"(0) x "A"(3)] -(6)-> "A"(5) computeLine# :: ["A"(0) x "A"(3) x "A"(0)] -(5)-> "A"(6) computeLine#1# :: ["A"(0) x "A"(0) x "A"(3)] -(5)-> "A"(6) computeLine#2# :: ["A"(3) x "A"(0) x "A"(0) x "A"(0)] -(5)-> "A"(6) lineMult# :: ["A"(0) x "A"(1) x "A"(0)] -(8)-> "A"(8) lineMult#1# :: ["A"(1) x "A"(0) x "A"(0)] -(7)-> "A"(12) lineMult#2# :: ["A"(0) x "A"(0) x "A"(1) x "A"(1)] -(8)-> "A"(12) matrixMult# :: ["A"(0) x "A"(3)] -(6)-> "A"(6) matrixMult#1# :: ["A"(0) x "A"(3)] -(6)-> "A"(6) c_27 :: ["A"(0)] -(0)-> "A"(12) c_28 :: ["A"(0)] -(0)-> "A"(15) c_30 :: ["A"(0)] -(0)-> "A"(15) c_31 :: ["A"(0)] -(0)-> "A"(14) Cost-free Signatures used: -------------------------- Base Constructor Signatures used: --------------------------------- "#0_A" :: [] -(0)-> "A"(1) "#neg_A" :: ["A"(0)] -(0)-> "A"(1) "#pos_A" :: ["A"(0)] -(1)-> "A"(1) "#s_A" :: ["A"(0)] -(0)-> "A"(1) "::_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) "c_27_A" :: ["A"(0)] -(0)-> "A"(1) "c_28_A" :: ["A"(0)] -(0)-> "A"(1) "c_30_A" :: ["A"(0)] -(0)-> "A"(1) "c_31_A" :: ["A"(0)] -(0)-> "A"(1) "leaf_A" :: [] -(0)-> "A"(1) "nil_A" :: [] -(0)-> "A"(1) "node_A" :: ["A"(1) x "A"(1) x "A"(1)] -(1)-> "A"(1) "tuple#2_A" :: ["A"(1) x "A"(1)] -(1)-> "A"(1) Following Still Strict Rules were Typed as: ------------------------------------------- 1. Strict: lineMult#(@n,@l1,@l2) -> c_27(lineMult#1#(@l1,@l2,@n)) 2. Weak: WORST_CASE(?,O(n^5))